<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    /*   var arr = [].concat(1, 2).concat(3, 4).concat(5, 6);
      console.log(arr);
  
      var s = new Set();
      s.add(1).add(2).add(3).add(4);
      console.log(s);
      
        链式操作的本质  方法的返回值=>同种类型的数据(新|原本的)
      */

    // 结论:
    // 采用链式的then，可以指定一组按照次序调用的回调函数,第一个回调函数完成以后，会将返回结果作为参数，传入第二个回调函数,以此类推。(注意:1.返回的数据是普通数据类型(非Promise实例)  2. catch可以捕获整个链式操作过程中 出现的错误)

    var p = new Promise(function (resolve, reject) {
        // aaaa;
        setTimeout(function () {
            resolve(1);
        }, 2000)
    })

    console.log(p);
    p.then(function (num) {
        // bbbb;
        console.log("callback1:", num);
        return 2;
    }).then(function (num) {
        // ccccc;
        console.log("callback2:", num);
        return 3;
    }).then(function (num) {
        ddddd;
        console.log("callback3:", num);
    }).catch(function (err) {
        console.log(err);
    })


    // 拆分分析

    // 异步操作 => p  => p1  => p2  => p3  
    // 后续实例的状态 依赖于前面实例的回调函数的执行的结果

    /*  var p = new Promise(function (resolve, reject) {
         setTimeout(function () {
             resolve(1);
             // reject(1);
         }, 2000);
     })

     console.log("p", p);

     var p1 = p.then(function (num) {
         console.log("callback1:", num);//1
         return 2;
     })
     console.log("p1", p1);

     var p2 = p1.then(function (num) {
         console.log("callback2:", num);//2
         return 3;
     })
     console.log("p2", p2);

     var p3 = p2.then(function (num) {
         console.log("callback3:", num);
     })
     console.log("p3", p3);

     p3.catch(function (err) {
         console.log("错误:", err);
     }) */



</script>

</html>